/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */

package beans;

import bc.DetalleVentaPrendaFacadeLocal;
import bc.IngresoPrendaTiendaFacadeLocal;
import bc.SalidaPrendaTiendaFacadeLocal;
import bc.StockPrendaTiendaOrigenFacadeLocal;
import be.DetalleVentaPrenda;
import be.IngresoPrendaTienda;
import be.Prenda;
import be.SalidaPrendaTienda;
import be.StockPrendaTiendaOrigen;
import be.StockPrendaTiendaOrigenPK;
import be.Tienda;
import java.io.Serializable;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.LinkedList;
import java.util.List;
import javax.ejb.EJB;
import javax.faces.bean.ManagedBean;
import javax.faces.bean.SessionScoped;

/**
 *
 **Copyright  2011 Yury Daniel Zavaleta De la Cruz
 * Licensed under the Apache License,
 * Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 * http://www.apache.org/licenses/LICENSE-2.0
 * Unless required by applicable law or agreed to in writing,
 * software distributed under the License is distributed on an "AS IS" BASIS
 * ,  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND,
 * either express or implied.
 * See the License for the specific language governing permissions and  limitations under the License.
 */
@ManagedBean
@SessionScoped
public class ManagedBeanStock implements Serializable{
    @EJB
    private DetalleVentaPrendaFacadeLocal detalleVentaPrendaFacade;
    @EJB
    private SalidaPrendaTiendaFacadeLocal salidaPrendaTiendaFacade;
    @EJB
    private IngresoPrendaTiendaFacadeLocal ingresoPrendaTiendaFacade;

    @EJB
    private StockPrendaTiendaOrigenFacadeLocal stockPrendaTiendaOrigenFacade;

 private StringBuilder cadena_fecha1 = new StringBuilder();
 private StringBuilder cadena_fecha2 = new StringBuilder();
private StockPrendaTiendaOrigen    stockPrendaTiendaOrigen;
private List<StockPrendaTiendaOrigen> lista;
private List<StockPrendaTiendaOrigen> lista2;
private int cantidad_stock;
private Prenda prenda;
private Tienda tienda;
private Date fecha_vencimiento;
private Date fecha_actual;
private int Paso;
private IngresoPrendaTienda ingresotiendaprenda;
private SalidaPrendaTienda salidatiendaprenda;

private Date fecha_inicio;
private Date fecha_fin;

private List<IngresoPrendaTienda> lista_entradas;
private List<SalidaPrendaTienda> lista_salidas;
private List<DetalleVentaPrenda> lista_detalles_venta;

private int total_entrada =0;
private int total_salida =0;
private int total_ventas =0;

private int total_entrada_anterior =0;
private int total_salida_anterior =0;
private int total_ventas_anterior =0;

private int total_stok_anterior =0;
private String descripcion ="";

    public ManagedBeanStock() {
        stockPrendaTiendaOrigen  = new StockPrendaTiendaOrigen();
        lista = new LinkedList<StockPrendaTiendaOrigen>();
        prenda = new Prenda();
        tienda = new Tienda(1);
        Paso=0;
        ingresotiendaprenda = new IngresoPrendaTienda();
        salidatiendaprenda = new SalidaPrendaTienda();
        fecha_vencimiento = new Date();
           fecha_actual = new Date();
    fecha_inicio = new Date();
    fecha_fin = new  Date();
    lista_entradas = new  LinkedList<IngresoPrendaTienda>();
    lista_salidas = new  LinkedList<SalidaPrendaTienda>();
    lista_detalles_venta = new LinkedList<DetalleVentaPrenda>();
    }

    public String getDescripcion() {
        return descripcion;
    }

    public void setDescripcion(String descripcion) {
        this.descripcion = descripcion;
    }

    public int getTotal_entrada_anterior() {
        return total_entrada_anterior;
    }

    public int getTotal_salida_anterior() {
        return total_salida_anterior;
    }

    public int getTotal_ventas_anterior() {
        return total_ventas_anterior;
    }


    public int getTotal_stok_anterior() {
        total_stok_anterior = total_entrada_anterior - (total_salida_anterior + total_ventas_anterior);
        return total_stok_anterior;
    }

    public Date getFecha_fin() {
        return fecha_fin;
    }

    public void setFecha_fin(Date fecha_fin) {
        this.fecha_fin = fecha_fin;
    }

    public Date getFecha_inicio() {
        return fecha_inicio;
    }

    public String getCadena_fecha1() {
          SimpleDateFormat fecha1 = new SimpleDateFormat("EEEEE dd MMMMM yyyy");
          cadena_fecha1 = new StringBuilder( fecha1.format( fecha_inicio ) );

        return cadena_fecha1.toString();
    }

    public String getCadena_fecha2() {
         SimpleDateFormat fecha2 = new SimpleDateFormat("EEEEE dd MMMMM yyyy");
          cadena_fecha2 = new StringBuilder( fecha2.format( fecha_fin ) );
        return cadena_fecha2.toString();

    }


    public void setFecha_inicio(Date fecha_inicio) {
        this.fecha_inicio = fecha_inicio;
    }

    public Date getFecha_actual() {
        return fecha_actual;
    }

    public void setFecha_actual(Date fecha_actual) {
        this.fecha_actual = fecha_actual;
    }


    public Date getFecha_vencimiento() {
        return fecha_vencimiento;
    }

    public void setFecha_vencimiento(Date fecha_vencimiento) {
        this.fecha_vencimiento = fecha_vencimiento;
    }

    public Prenda getPrenda() {
        return prenda;
    }

    public void setPrenda(Prenda prenda) {
        this.prenda = prenda;
    }

    public Tienda getTienda() {
        return tienda;
    }

    public void setTienda(Tienda tienda) {
        this.tienda = tienda;
    }

    public int getCantidad_stock() {
        return cantidad_stock;
    }

    public int getTotal_ventas() {
        return total_ventas;
    }


    public void setCantidad_stock(int cantidad_stock) {
        this.cantidad_stock = cantidad_stock;
    }

    public int getTotal_entrada() {
        return total_entrada;
    }

    public int getTotal_salida() {
        return total_salida;
    }


public List<StockPrendaTiendaOrigen> getLista() {
 
    return lista;
}

    public StockPrendaTiendaOrigen getStockPrendaTiendaOrigen() {
        return stockPrendaTiendaOrigen;
    }

    public void setStockPrendaTiendaOrigen(StockPrendaTiendaOrigen stockPrendaTiendaOrigen) {
        this.stockPrendaTiendaOrigen = stockPrendaTiendaOrigen;
    }


    public void buscar(){
lista.clear();
     
this.cargar_lista2();

for(StockPrendaTiendaOrigen st : lista2){

    if(st.getPrenda().getNombrePrenda().equals(prenda.getNombrePrenda()))
    {
    lista.add(st);
    }
}

    }


     public void seguimiento_productos(){
         lista_entradas.clear();
         lista_salidas.clear();
         lista_detalles_venta.clear();
         total_entrada=0;
         total_salida=0;
         total_ventas =0;
         total_entrada_anterior=0;
         total_salida_anterior=0;
         total_ventas_anterior =0;

         total_stok_anterior=0;
for ( IngresoPrendaTienda i : prenda.getIngresoPrendaTiendaList())
{
    if(i.getFechaIngreso().equals(fecha_inicio) || i.getFechaIngreso().equals(fecha_fin) || (i.getFechaIngreso().after(fecha_inicio) && i.getFechaIngreso().before(fecha_fin)))
    {
    if(i.getCantidad() != 0 && i.getTienda().getNombreTienda().equals(tienda.getNombreTienda()))
    {
    lista_entradas.add(i);
    total_entrada = total_entrada + i.getCantidad();
    }
   }

 else {
    if(i.getFechaIngreso().before(fecha_inicio) && i.getTienda().getNombreTienda().equals(tienda.getNombreTienda())){
  total_entrada_anterior = total_entrada_anterior + i.getCantidad();
   }
    }
}
//lista_entradas = ingresoPrendaTiendaFacade.findAll();



for ( SalidaPrendaTienda s: prenda.getSalidaPrendaTiendaList())
{
   if(s.getFechaSalida().equals(fecha_inicio) || s.getFechaSalida().equals(fecha_fin) || (s.getFechaSalida().after(fecha_inicio) && s.getFechaSalida().before(fecha_fin)))
    {
    if(s.getCantidad() !=0 && s.getTienda().getNombreTienda().equals(tienda.getNombreTienda())){
    lista_salidas.add(s);
    total_salida = total_salida + s.getCantidad();
    }
    }
    else {
   if(s.getFechaSalida().before(fecha_inicio) && s.getTienda().getNombreTienda().equals(tienda.getNombreTienda())){
   total_salida_anterior = total_salida_anterior + s.getCantidad();
   }
    }
}

for(DetalleVentaPrenda d: prenda.getDetalleVentaPrendaList()){

    if(d.getVenta().getFechaVenta().equals(fecha_inicio) || d.getVenta().getFechaVenta().equals(fecha_fin) || (d.getVenta().getFechaVenta().after(fecha_inicio) && d.getVenta().getFechaVenta().before(fecha_fin)) ){
     if( d.getVenta().getTienda().getNombreTienda().equals(tienda.getNombreTienda())){
    lista_detalles_venta.add(d);
    total_ventas = total_ventas + d.getCantidad();
        }
    }
 else{
     if(d.getVenta().getFechaVenta().before(fecha_inicio) && d.getVenta().getTienda().getNombreTienda().equals(tienda.getNombreTienda())){
   total_ventas_anterior = total_ventas_anterior + d.getCantidad();
   }
        }

}

//lista_salidas = salidaPrendaTiendaFacade.findAll();

     }

       public void seguimiento_productos_stock_anterior(){
total_stok_anterior =0;
for ( IngresoPrendaTienda i : prenda.getIngresoPrendaTiendaList())
{
    if(i.getFechaIngreso().equals(fecha_inicio) || i.getFechaIngreso().equals(fecha_fin) || i.getFechaIngreso().after(fecha_inicio) || i.getFechaIngreso().before(fecha_fin))
    {
    if(i.getCantidad() != 0 && i.getTienda().getNombreTienda().equals(tienda.getNombreTienda()))
    {
    lista_entradas.add(i);
    total_entrada = total_entrada + i.getCantidad();
    }
   }
}
//lista_entradas = ingresoPrendaTiendaFacade.findAll();



for ( SalidaPrendaTienda s: prenda.getSalidaPrendaTiendaList())
{
   if(s.getFechaSalida().equals(fecha_inicio) || s.getFechaSalida().equals(fecha_fin) || s.getFechaSalida().after(fecha_inicio) || s.getFechaSalida().before(fecha_fin))

    {
    if(s.getCantidad() !=0 && s.getTienda().getNombreTienda().equals(tienda.getNombreTienda())){
    lista_salidas.add(s);
    total_salida = total_salida + s.getCantidad();
    }
    }
}

for(DetalleVentaPrenda d: prenda.getDetalleVentaPrendaList()){

    if(d.getVenta().getFechaVenta().equals(fecha_inicio) || d.getVenta().getFechaVenta().equals(fecha_fin) || d.getVenta().getFechaVenta().after(fecha_inicio) || d.getVenta().getFechaVenta().before(fecha_fin) ){
     if( d.getVenta().getTienda().getNombreTienda().equals(tienda.getNombreTienda())){
    lista_detalles_venta.add(d);
    total_ventas = total_ventas + d.getCantidad();
        }
    }

}

//lista_salidas = salidaPrendaTiendaFacade.findAll();

     }

    public List<StockPrendaTiendaOrigen> getRetornaLista() {
        return lista;
    }
public String entra(){
    cantidad_stock=0;
return "ingreso_almacen";
}

public String Almacen(){
    cantidad_stock=0;
return "almacen";
}

public String Nuevo_ingreso(){
    stockPrendaTiendaOrigen = new StockPrendaTiendaOrigen();
    
return "nuevo_ingreso";
}
public String sale(){
return "salida_almacen";
}

public String fecha(){
return "fecha_vencimiento";
}

public String registrar(){
    try {
StockPrendaTiendaOrigen st = new StockPrendaTiendaOrigen();
StockPrendaTiendaOrigen st2 = new StockPrendaTiendaOrigen();
st.setPrenda(prenda);
st.setTienda(tienda);
st.setCantidad(cantidad_stock);
st.setStockPrendaTiendaOrigenPK(new StockPrendaTiendaOrigenPK(prenda.getIdPrenda(), tienda.getIdTienda()) );
st.setUltimaFechaIngreso(fecha_vencimiento);


st2.setPrenda(prenda);
st2.setTienda(tienda);
st2.setCantidad(0);
st2.setDescripcion(descripcion);
st2.setStockPrendaTiendaOrigenPK(new StockPrendaTiendaOrigenPK(prenda.getIdPrenda(), tienda.getIdTienda()) );
st2.setUltimaFechaIngreso(fecha_vencimiento);

//Aqui Yuryyyyyy
stockPrendaTiendaOrigenFacade.create(st2);

// Agregado
stockPrendaTiendaOrigen = st2;
this.Registro_Incremento2();
        this.cargar_lista2();
       this.buscar();
    } catch (Exception e) {
    }
       tienda = new Tienda(1);
       cantidad_stock = 0;
       fecha_vencimiento = new Date();
       descripcion ="";

    return "almacen?faces-redirect=true";

}

public String Registro_Incremento(){

      try {
   stockPrendaTiendaOrigen.setCantidad(stockPrendaTiendaOrigen.getCantidad()+cantidad_stock);
   stockPrendaTiendaOrigenFacade.edit(stockPrendaTiendaOrigen);
   ingresotiendaprenda.setCantidad(cantidad_stock);
   ingresotiendaprenda.setFechaIngreso(new Date());
   ingresotiendaprenda.setPrenda(stockPrendaTiendaOrigen.getPrenda());
   ingresotiendaprenda.setTienda(stockPrendaTiendaOrigen.getTienda());
   ingresoPrendaTiendaFacade.create(ingresotiendaprenda);
   cantidad_stock=0;
    } catch (Exception e) {
    e.printStackTrace();
    }
  return "almacen?faces-redirect=true";
}



public String EditarFecha(){


  try {

   stockPrendaTiendaOrigenFacade.edit(stockPrendaTiendaOrigen);
    } catch (Exception e) {
    e.printStackTrace();
    }
  return "almacen?faces-redirect=true";
}

public String Registro_Decremento(){


  try {
   stockPrendaTiendaOrigen.setCantidad(stockPrendaTiendaOrigen.getCantidad()-cantidad_stock);
   stockPrendaTiendaOrigenFacade.edit(stockPrendaTiendaOrigen);
   salidatiendaprenda.setCantidad(cantidad_stock);
   salidatiendaprenda.setFechaSalida(new Date());
   salidatiendaprenda.setPrenda(stockPrendaTiendaOrigen.getPrenda());
   salidatiendaprenda.setTienda(stockPrendaTiendaOrigen.getTienda());
   salidaPrendaTiendaFacade.create(salidatiendaprenda);
   cantidad_stock=0;
    } catch (Exception e) {
    e.printStackTrace();
    }
  return "almacen?faces-redirect=true";
}

public void cargar_lista2(){
    
    try {
       lista2= stockPrendaTiendaOrigenFacade.findAll();
    } catch (Exception e) {
    }

}


public List<StockPrendaTiendaOrigen> getListaTotales(){
return  stockPrendaTiendaOrigenFacade.findAll();
   
}
public String seguimiento(){
    prenda = new Prenda();
    tienda= new Tienda(1);

    lista_detalles_venta = new LinkedList<DetalleVentaPrenda>();
    lista_salidas = new LinkedList<SalidaPrendaTienda>();
    lista_entradas = new LinkedList<IngresoPrendaTienda>();
return "seguimiento";
}

public String Volver_Almacen(){
return "index?faces-redirect=true";
     }

    public List<IngresoPrendaTienda> getLista_entradas() {
return lista_entradas;


    }

    public List<SalidaPrendaTienda> getLista_salidas() {
        return lista_salidas;
    }


    public void Registro_Incremento2(){

      try {
   stockPrendaTiendaOrigen.setCantidad(stockPrendaTiendaOrigen.getCantidad()+cantidad_stock);
   stockPrendaTiendaOrigenFacade.edit(stockPrendaTiendaOrigen);
   ingresotiendaprenda.setCantidad(cantidad_stock);
   ingresotiendaprenda.setFechaIngreso(new Date());
   ingresotiendaprenda.setPrenda(stockPrendaTiendaOrigen.getPrenda());
   ingresotiendaprenda.setTienda(stockPrendaTiendaOrigen.getTienda());
   ingresoPrendaTiendaFacade.create(ingresotiendaprenda);
   cantidad_stock=0;
    } catch (Exception e) {
    e.printStackTrace();
    }
  
}

    public List<DetalleVentaPrenda> getLista_detalles_venta() {
        return lista_detalles_venta;
    }


}
